package cn.com.dcsgo.service;

import cn.com.dcsgo.domain.Notice;
import cn.com.dcsgo.dto.NoticeAddDTO;
import cn.com.dcsgo.dto.NoticeQueryDTO;
import cn.com.dcsgo.dto.NoticeUpdateDTO;
import cn.com.dcsgo.dto.PageDTO;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.IService;

import java.util.List;

/**
 * 针对表【notice】的数据库操作Service
 *
 * @author Dcsgo
 * @since 2025-10-26 13:09:56
 */
public interface NoticeService extends IService<Notice> {

    /**
     * 分页获取公告
     *
     * @param pageDTO        分页参数
     * @param noticeQueryDTO 查询参数
     * @return 公告分页数据（按创建时间逆序排序）
     */
    Page<Notice> getPage(PageDTO pageDTO, NoticeQueryDTO noticeQueryDTO);

    /**
     * 添加公告，默认为公布，不置顶
     *
     * @param noticeAddDTO 公告信息
     * @return true-添加成功，false-添加失败
     */
    boolean save(NoticeAddDTO noticeAddDTO);

    /**
     * 修改公告
     *
     * @param noticeUpdateDTO 公告信息
     * @return true-修改成功，false-修改失败
     */
    boolean update(NoticeUpdateDTO noticeUpdateDTO);

    /**
     * 删除公告（重写MP提供的方法，加清Redis缓存）
     *
     * @param noticeId 公告ID
     * @return true-删除成功，false-删除失败
     */
    boolean removeById(Long noticeId);

    /**
     * 获取超级店铺公告列表
     * @return 状态为正常的公告，按是否置顶及更新时间逆序排序
     */
    List<Notice> getSupperNoticeList();

    /**
     * 获取公告（重写MP方法，加缓存）
     * @param noticeId 公告ID
     * @return 公告信息
     */
    Notice getById(Long noticeId);
}
